//
//  UIResponder+YCExtension.m
//  YCPublicDemo
//
//  Created by itclimb on 22/05/2017.
//  Copyright © 2017 xinhuanwangluo. All rights reserved.
//

#import "UIResponder+YCExtension.h"

@implementation UIResponder (YCExtension)

/**
 *  查找视图的视图控制器
 *
 *  @param view 视图
 *
 *  @return 返回视图的控制器
 */
- (UIViewController *)getControllerFromView:(UIView *)view {
    // 遍历响应者链。返回第一个找到视图控制器
    UIResponder *responder = view;
    while ((responder = [responder nextResponder])){
        if ([responder isKindOfClass: [UIViewController class]]){
            return (UIViewController *)responder;
        }
    }
    // 如果没有找到则返回nil
    return nil;
}

/**
 *  设置为第一响应者
 */
- (void)setBecomeFirstResponder {
    // 判断对象是否已经是第一响应者
    if ([self isFirstResponder]) {
        return;
    }
    // 判断对象是否允许成为第一响应者
    if ([self canBecomeFirstResponder]) {
        // 设置成为第一响应者
        [self becomeFirstResponder];
    }
}

/**
 *  放弃第一响应者
 */
- (void)setResignFirstResponder {
    // 判断对象是否不是第一响应者
    if (![self isFirstResponder]) {
        return;
    }
    // 判断对象是否允许放弃第一响应者
    if ([self canResignFirstResponder]) {
        // 设置放弃第一响应者
        [self resignFirstResponder];
    }
}

/**
 *  重写方法，允许对象成为第一响应者
 *  UIView默认不允许设置为第一响应者
 *  因此设置UIView为第一响应者需要重写canBecomeFirstResponder方法并返回YES
 */
//- (BOOL)canBecomeFirstResponder {
//    return YES;
//}

/**
 *  拨打电话弹框
 */
- (void)showMakeAPhoneCall:(NSString *)phoneNumber title:(NSString *)title {
    UIAlertController *alert = [UIAlertController alertControllerWithTitle:title message:phoneNumber preferredStyle:UIAlertControllerStyleAlert];
    [alert addAction:[UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
        NSString *newPhoneStr = [phoneNumber stringByReplacingOccurrencesOfString:@"-" withString:@""];
        NSURL *dialUrl = [NSURL URLWithString:[NSString stringWithFormat:@"tel:%@", newPhoneStr]];
        
        if ([[UIApplication sharedApplication] canOpenURL:dialUrl]) {
            [[UIApplication sharedApplication] openURL:dialUrl options:@{} completionHandler:^(BOOL success) {
                if (!success) {
                    //失败
                }
            }];
        }
        else {
        }
    }]];
    [alert addAction:[UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:^(UIAlertAction * _Nonnull action) {
        
    }]];
    [[UIApplication sharedApplication].keyWindow.rootViewController presentViewController:alert animated:YES completion:nil];
}

/**
 *  查找视图的视图控制器
 *  @return 返回视图的控制器
 */
- (UIViewController *)yc_viewController {
    if ([self isKindOfClass:[UIResponder class]]) {
        UIResponder *rself = (UIResponder *) self;
        if ([rself.nextResponder isKindOfClass:[UIViewController class]]) {
            return (UIViewController *)rself.nextResponder;
        } else {
            return [rself.nextResponder yc_viewController];
        }
    } else {
        return nil;
    }
}

@end
